﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using FrbaCommerce.Clases;
using FrbaCommerce.Ver_Publicacion;

namespace FrbaCommerce.Comprar_Ofertar
{
    public partial class AltaCompra : Form
    {
        Compra compra = new Compra();
        Boolean sinStock = false;
        ComprarOfertar parentForm;

        public AltaCompra (decimal cod_publi, ComprarOfertar parent)
        {
            InitializeComponent();
            this.label_cod_publi.Text = cod_publi.ToString();
            parentForm = parent;
            getCantidad();
            this.combo_cantidad.DisplayMember = "cantidad";
            if (preguntasHabilitadas(cod_publi)) 
            {
                this.link_preguntar.Visible = true;
                this.link_preguntar.Click +=new EventHandler(link_preguntar_Click);
            }                
        }

        private bool preguntasHabilitadas(decimal cod_publi)
        {
            DataSet data;
            ConexionSql conexion = new ConexionSql();
            String query = "select preguntas_habilitadas from ASDF.Publicacion where cod = " + cod_publi.ToString();

            try
            {
                data = conexion.ejecutarConsulta(query);
                return Convert.ToBoolean(data.Tables[0].Rows[0].ItemArray[0].ToString());
            }
            catch (Exception ex)
            {
                MessageBox.Show("Problema de conexión con la BD: " + ex.Message);
            }

            return false;
        }
        

        private void link_preguntar_Click(object sender, EventArgs e) 
        {
            AltaPregunta pregunta = new AltaPregunta(Convert.ToDecimal(this.label_cod_publi.Text), parentForm.getIdUsuarioLogueado());
            pregunta.ShowDialog();
        }

        private void btn_cancelar_Click (object sender, EventArgs e) 
        {
            this.Close();
        }

        private void link_ver_publi_Click(object sender, EventArgs e)
        {
            VerPublicacion publiInfo = new VerPublicacion(Convert.ToDecimal(this.label_cod_publi.Text));
            publiInfo.ShowDialog();
        }

        private void btn_guardar_Click(object sender, EventArgs e) 
        {
            if (this.combo_cantidad.Text.Length == 0)  
            {
                MessageBox.Show("Seleccione una cantidad a comprar");
                return;
            }
            
            try
            {
                this.compra.setDatos(Convert.ToDecimal(this.label_cod_publi.Text), this.parentForm.getIdUsuarioLogueado(), Convert.ToInt32(this.combo_cantidad.Text));
                this.compra.guardar();
            }
            finally 
            {
                MessageBox.Show("Su compra ha sido realizada");
                this.Close();
            }
        }

        private void getCantidad()
        {
            ConexionSql conexion = new ConexionSql();
            DataSet data;
            String query = "select stock from ASDF.Publicacion where cod = " + this.label_cod_publi.Text;
            int cant = 0;

            try
            {
                data = conexion.ejecutarConsulta(query);
                cant = Convert.ToInt32(data.Tables[0].Rows[0].ItemArray[0].ToString());

                if (cant == 0) 
                {
                    MessageBox.Show("Esta publicación no dispone de stock");
                    this.sinStock = true;
                    return;
                }

                DataTable cantidad = new DataTable();
                cantidad.Columns.Add(new DataColumn("cantidad"));   
            
                for (int i = 1; i <= cant; i++) 
                {
                    DataRow row = cantidad.NewRow();
                    row["cantidad"] = i;
                    cantidad.Rows.Add(row);
                }

                this.combo_cantidad.DataSource = cantidad;
            }

            catch (Exception ex)
            {
                MessageBox.Show("Problema de conexión con la BD: " + ex.Message);
            }

        }

        public Boolean getSinStock() 
        {
           return this.sinStock;
        }
    }
}
